package com.copa.l24;

/**
 * @author copa
 * @createDate 2022-04-29 15:04
 * @function 迭代法 由于这个指针改值我绕晕了...所以还是看了思路才知道怎么解决
 */
public class Test1 {

    public ListNode swapPairs(ListNode head) {
        // 传进来的head节点数小于2，直接返回
        if (head == null || head.next == null) {
            return head;
        }
        // 定义一个返回结果，并设置为头结点
        ListNode result = new ListNode();
        result.next = head;
        // 临时指针辅助result
        ListNode cur = result;
        // 如果后两个值不为空
        while (cur.next != null && cur.next.next != null) {
            // 这个逻辑具体看title.txt
            ListNode next = head.next;
            ListNode tmp = head.next.next;
            cur.next = next;
            next.next = head;
            head.next = tmp;
            cur = head;
            head = head.next;
        }
        return result.next;
    }

    public static void main(String[] args) {
        ListNode listNode = new ListNode(1);
        listNode.next = new ListNode(2);
        listNode.next.next = new ListNode(3);
        listNode.next.next.next = new ListNode(4);
        ListNode node = new Test1().swapPairs(listNode);
        while (node != null) {
            System.out.println(node.val);
            node = node.next;
        }
    }
}
